Echo 路由設計與參數處理:像在速食店點餐一樣簡單
之前我們已經把 Go 跟 Echo 搞定,算是把店開起來了。
你可以想像:我們的程式就像一間速食店,Echo 就是店員,負責聽客人點單,再把單子送到廚房(也就是程式邏輯)。
今天要升級的技能是「路由設計」和「參數處理」。
聽起來好像很硬,但其實就像點餐一樣簡單!
路由(Route)就是「規則」,決定客人(使用者)說的話,要送到哪個廚房(Handler)處理。
就像你去麥當勞說:「我要大麥克套餐!」
店員就會知道:
如果沒有路由,客人隨便喊:「來一份雞排珍珠奶茶加牛肉捲!」
整個店一定亂掉。
速食店的菜單一定會分區:
🍔 漢堡區
🍟 炸物區
🥤 飲料區
🍦 甜點區
網站也是一樣。你不會想把「登入」、「看商品」、「下訂單」全部亂糟糟放一起吧?
在 Echo 裡,我們可以用 路由群組 (Router Groups) 來分區。
e := echo.New()
// 建立一個 "/api/v1" 的群組
v1 := e.Group("/api/v1")
v1.GET("/users", handlerForUsers) // 查使用者
v1.POST("/products", handlerForProducts) // 新增產品
// 群組再細分
auth := v1.Group("/auth")
auth.POST("/login", handlerForLogin)
這樣 /api/v1 就像「菜單版本一」的專區,裡面再分「使用者」、「產品」、「登入」。
整齊乾淨,日後想改也超方便。
你走到櫃檯說:「我要 123 號套餐!」
店員就知道該拿哪一份。
這在程式世界,就是 路由參數。
e.GET("/users/:id", func(c echo.Context) error {
userID := c.Param("id") // 拿到 123
return c.String("User ID: " + userID)
})
網址 /users/123 → Echo 自動抓到 id=123。
這就像店員聽懂了你要的號碼餐。
參數不只一種,常見的有三種:
像 /users/:id,要明確指出「我要哪個」。
→ 就像說:「給我 123 號套餐」。
就是網址後面加 ?,像:
/products?category=electronics&sort=price
category := c.QueryParam("category") // electronics
sort := c.QueryParam("sort") // price
這就像對店員說:「我要飲料,但要大杯、去冰。」
這通常用在 POST,就像填一張單子給店員。
type User struct {
Name string `json:"name"`
Email string `json:"email"`
}
e.POST("/users", func(c echo.Context) error {
u := new(User)
if err := c.Bind(u); err != nil {
return err
}
return c.JSON(http.StatusOK, u)
})
就像寫單子:
「名字:Jeff,Email:jeff@example.com」
店員拿到後照單處理。
想像你去點:「咖啡,不要洋蔥。」
店員一定黑人問號。
這時候就需要 驗證 (Validation),避免亂七八糟的點單進到廚房。
type User struct {
Name string `json:"name" validate:"required"`
Email string `json:"email" validate:"required,email"`
Age int `json:"age" validate:"gte=0,lte=130"`
}
規則是:
如果有人亂填,Echo 就會說:
「欸~不行啦!」
幫你擋掉不合理的資料。
這就是基本的 CRUD(新增、查詢、修改、刪除),任何網站都跑不掉。
今天學的東西就像一個專業速食店員:
下次我們要更進階,聊聊 Middleware —— 這就像速食店的「隱藏規矩」。
例如「每個人點餐前都要先排隊」、「結帳一定要先付錢」,
讓整間店(網站)不會亂成一團。